package blueBridge;

import java.util.Arrays;
import java.util.Scanner;

public class Main5130_Two {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();//总共的天数
        int m=sc.nextInt();//健身计划个数
        int q=sc.nextInt();//有其它安排的天数
        int []capacity=new int[q+1];//因为是切割，所以除去默认为的部分，还要再+1
        int []arr1=new int[q+2];
        arr1[q+1]=n+1;
        for(int i=1;i<q+1;i++){
               arr1[i]=sc.nextInt();
        }
        for(int i=0;i<capacity.length;i++){
            capacity[i]=arr1[i+1]-arr1[i]-1;//计算每段空闲的天数容量
        }
        int []w=new int[m];
        int []v=new int[m];
        for(int i=0;i<m;++i){
            w[i]=(int)Math.pow(2,sc.nextInt());
            v[i]=sc.nextInt();
        }
        
        long sum=0;
        for(int i=0;i<capacity.length;i++){
            sum+=package1(w,v,capacity[i]);
        }
        System.out.println(sum);
        
        //System.out.println(package1(w, v, 361));
    }
    public static long package1(int []w,int[]v,int capacity){//背包问题的代码，参数为健身计划的天数（重量），健身计划收益（价值），可用的连续空余时间（背包空间）
        if(capacity==0)
            return 0;//如果背包容量为0，收益返回0
        long [][]value=new long[w.length+1][capacity+1];//因为第value[0]列和value[][0]行都为0
        for(int i=1;i<w.length+1;i++)
            for(int j=1;j<capacity+1;j++){
                if(w[i-1]>j)
                    value[i][j]=value[i-1][j];
                else
                    value[i][j]=Math.max(value[i-1][j],v[i-1]+value[i][j-w[i-1]]);//完全背包和01背包代码区别，01背包此处：v[i-1]+value[i-1][j-w[i-1]]，即不能重复购买
            }
            System.out.println(value[w.length][capacity]);
            /*
        for (int i = 0; i < w.length+1; i++) {
            System.out.println(Arrays.toString(value[i]));
        }
        */
        return value[w.length][capacity];//返回最大健身收益（价值），即二维数组最后一个元素
    }
}
